package 简单.字符串;

/**
 * 给你一个字符串 s ，将该字符串中的大写字母转换成相同的小写字母，返回新的字符串。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/to-lower-case/
 */
public class 转换成小写字母_709 {

    public static void main(String[] args) {

        System.out.println('a' - 'A');
        System.out.println('z' - 'Z');

        //全转小写：ch|=32
        //全转大写：ch&=-33 (原理是32的补码（原码取反+1）再-1)
        //大小写对换（大写变小写，小写变大）ch^=32
        char A = 'A';
        System.out.println(A |= 32);
        char a = 'a';
        System.out.println(a &= -33);
        System.out.println(efficientToLowerCase("AAc"));

    }

    /**
     * 得出规律
     * a-A=32...z-Z=32
     *
     * @param s
     * @return
     */
    public static String toLowerCase(String s) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char cur = s.charAt(i);  //重复获取s.charAt(i)，会消耗时间
            if (65 <= cur && cur <= 90) {  //大写字母
                cur = (char) (cur + 32);
            }
            builder.append(cur);
        }
        return builder.toString();
    }

    public static String efficientToLowerCase(String s) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char cur = s.charAt(i);  //重复获取s.charAt(i)，会消耗时间
            if (65 <= cur && cur <= 90) {  //大写字母
                cur |= 32;
            }
            builder.append(cur);
        }
        return builder.toString();
    }

}
